簡介
委託(delegate)是一種類型安全的函式指針,用於通用語言運行庫(CLI)。在C#中,delegate是一種class,包裝了一個或多個函式指針及綁定的類實例。Delegate用來實現函式回調與事件接收(event listener)。Delegate對象可以作為參數傳遞給其他函式,以引用(referenced)封裝在delegate對象中的函式,而無需在編譯時刻就綁定被調用函式。
一旦為委託分配了函式方法,委託將與該函式方法具有完全相同的行為。 與委託的 類型特徵(由返回類型和參數組成)匹配的任何方法都可以分配給該委託。
技術實現細節
“委託”作為類,繼承自System.MulticastDelegate(抽象類)。可以認為包含:一個類對象實例的地址(Target屬性),該類的一個方法的地址(Method屬性),以及另一個“委託”實例的引用(reference)。因此引用一個“委託”對象,可能實際上引用了多個“委託”的實例。“委託”對象被調用時,依次調用裡面的多個“委託”的實例。這對於事件驅動的程式比較有用。
如果“委託”封裝了一個靜態函式,則其內部的綁定的類對象地址為null。
可以通過Delegate類的GetInvocationList()取出這些委託,並查看其Target和Method屬性,獲取所引用的方法名等信息。
類型特徵
型簽(英語:type signature)或 型標(type annotation)是計算機科學中對程式的函式、方法、子過程、以及變數等給出其類型。特別是對函式給出其輸入參數數量、類型與次序及輸出結果的類型。 許多編譯器產生的內部使用的函式名包含了其類型特徵,這稱為名字修飾,給連結器辨別不同的函式提供了方便。
類型特徵的現代套用:
•面向對象語言使用的interface,實際上是利用了函式類型特徵的模板。
•C++支持的函式重載實際上用不同的類型特徵來辨識。 [1]
函式指針
函式指針是一種在C、C++、D語言、其他類 C 語言和Fortran2003中的指針。函式指針可以像一般函式一樣,用於調用函式、傳遞參數。在如 C 這樣的語言中,通過提供一個簡單的選取、執行函式的方法,函式指針可以簡化代碼。
函式指針只能指向具有特定特徵的函式。因而所有被同一指針運用的函式必須具有相同的參數和返回類型。
通用語言運行庫
通用語言運行平台( Common Language Runtime,簡稱 CLR)是微軟為他們的.NET的虛擬機所選用的名稱。它是微軟對通用語言架構(CLI)的實現版本,它定義了一個代碼運行的環境。CLR運行一種稱為通用中間語言的位元組碼,這個是微軟的通用中間語言實現版本。
CLR運行在微軟的視窗作業系統上。查看通用語言架構可以找到該規格的實現版本列表。其中有一些版本是運行在非Windows的作業系統中。